Ein Unterprogramm ist ein Baustein, der von Programmierern aufgerufen werden kann, ohne dass dessen Inhalt genau bekannt sein muss. Das folgende Programm enthält ein Unterprogramm QuadratFesterLänge, das ohne Intervention des Benutzers ein Quadrat zeichnet. Das Quadrat entsteht nicht interaktiv wie mit einem Zeichenprogramm sondern programmgesteuert. Positions- und Grössenangaben sind in einem Grafikprogramm nur dann möglich, wenn das Programm ein Koordinatensystem und eine Masseinheit kennt. Die meisten Programmierumgebungen verwenden die Masseinheit Punkt (engl. pixel für picture element) und das rechtwinklige Koordinatensystem:

Das Koordinatensystem von Excel beginnt die Zählung links oben. Der Punkt mit der X-Koordinate von 0 und der Y-Koordinate von 0 heisst Ursprung. Unser Quadrat soll seine linke obere Ecke im Punkt (100, 100), also 100 Punkte vom Ursprung nach unten und 100 Punkte nach rechts, haben. Das folgende Bild zeigt das Quadrat als Verbindung von vier Eckpunkten durch Geraden:

Entwurfssprachlich lässt sich das programmgesteuerte Zeichnen des Beispielquadrats wie folgt beschreiben:
Unterprogramm QuadratFesterLänge Zeichne hintereinander ... die Gerade(100,100, 200,100) die Gerade(200,100, 200,200) die Gerade(200,200, 100,200) die Gerade(100,200, 100,100)
Die Anweisung 'Gerade' zeichnet eine gerade Linie zwischen einem ersten und einem zweiten Punkt. Der erste Aufruf von Gerade zeichnet eine Gerade zwischen dem linken oberen und dem rechten oberen Eckpunkt des Quadrats. Die restlichen Anweisungen zeichnen gleich grosse Geraden zwischen den übrigen Eckpunkten.
Die erste Geradenanweisung des folgenden VBA-Programms zeichnet eine Gerade. Die programmiersprachliche Anweisung enthält mehr Information und ist deshalb länger als die entwurfssprachliche Version:
Worksheets(“Ausgabeblatt”) .Shapes.AddLine.(100,100, 200,100).Visible = True
Die Anweisung besteht aus den folgenden Elementen:
Der gleiche Inhalt lässt sich auch abgekürzt schreiben:
Ausgabeblatt
.Shapes.AddLine.(100,100, 200,100).Visible = True
Das folgende Unterprogramm fasst vier Geradenanweisungen unter dem Namen QuadratFesterLänge zusammen. Die Anweisungen Sub und End Sub fassen die Anweisungen dazwischen zu einer Subroutine zusammen. Die Klammer With ... End With verhindert, dass Ausgabeblatt.Shapes dreimal wiederholt werden muss.
Sub QuadratFesterLänge() With Ausgabeblatt.Shapes .AddLine(100,100, 200,100).Visible = True .AddLine(200,100, 200,200).Visible = True .AddLine(200,200, 100,200).Visible = True .AddLine(100,200, 100,100).Visible = True End With End Sub
Die Verwendung einer Subroutine bringt die folgenden Vorteile:
Künftig brauchen wir statt der vier Geradenanweisungen nur noch QuadratFesterLänge zu schreiben, wenn wir ein Quadrat zeichnen wollen. Dies ist nicht nur kürzer, sondern auch leserlicher.
Die Subroutine steht unter dem Namen QuadratFesterLänge() als Teil einer Programmbibliothek auch anderen Entwicklern zur Verfügung.
QuadratFesterLänge() ist unflexibel, weil es immer an der gleichen Position ein Quadrat der gleichen Länge zeichnet. Um diesen Mangel zu beheben, erlauben Programmiersprachen die Definition von Argumenten, welche beim Aufruf des Unterprogramms übergeben werden können. Argumente, die sich für jeden Aufruf neu setzen lassen, sind in unserem Beispiel Position und Länge. Das Hilfethema Argumente zeigt am Beispiel Quadrat, wie sie Unterprogramme mit Argumenten definieren können.
Eine Subroutine ist ein Unterprogramm, das aus formal und inhaltlich zusammengehörenden Anweisungen besteht, die sich unter einem Namen aufrufen lassen. Eine zweite Klasse von Unterprogrammen heisst Funktion. Die Entwicklung eines Programms aus verschiedenen Unterprogrammen ist nur dann effizient, wenn eine komfortable Entwicklungsumgebung die Erstellung und den Test von Unterprogrammen unterstützt.